/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package caintra.Sapra.Reportes.Prefactura;

import caintra.Sapra.Model.PrefacturaDetalleQM;
import caintra.Sapra.Model.PrefacturaQM;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.SQLException;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.filetransfer.Download;
import nextapp.echo2.app.filetransfer.DownloadProvider;
import org.sapra.dep.conexion.DBWRAP;

/**
 *
 * @author cobain
 */
public class iniciarReporte {

    Connection conn = null;
    //JasperReport masterReport = null;
    //Map parametro = new HashMap();

    public iniciarReporte() {
        try {
            Class.forName("com.mysql.jdbc.Driver"); //se carga el driver
            DBWRAP db = new DBWRAP();
            conn = db.getConnection();
            //conn = DriverManager.getConnection("jdbc:mysql:www.administraciondepracticantes.com:8080/caintra", "innoapps", "93js92jd9");
            //JOptionPane.showMessageDialog(null, "Conexión establecida");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void ejecutarReporte(String id, int vis, int fct) {
        String archivo = "";
        if (fct == 0) {
            //archivo = "/opt/innoapps/ALT/Factura.jasper";
            archivo = "C:/Users/develop/Documents/DocsSapra/Factura.jasper";
            //archivo = "/home/cobain/Escritorio/Factura.jasper";
            
        } else {
            //archivo = "/opt/innoapps/ALT/Factura.jasper";
            archivo = "C:/Users/develop/Documents/DocsSapra/factura_qm.jasper";
           //archivo = "/home/cobain/Escritorio/factura_qm.jasper";
        }
        try {
            //String archivo = "/home/cobain/Escritorio/Factura.jasper";
            //String archivo = "/opt/innoapps/ALT/Factura.jasper";
            System.out.println("Ruta" + archivo);
            if (archivo == null) {
                System.out.println("No se encuentra el archivo.");
                System.exit(2);
            }
            JasperReport masterReport = null;
            try {
                masterReport = (JasperReport) JRLoader.loadObject(archivo);
            } catch (JRException e) {
                System.out.println("Error cargando el reporte maestro: " + e.getMessage());
                System.exit(3);
            }
          Map parametro;
            if (fct == 0) {
                 parametro = new HashMap();
                parametro.put("periodoId", id);
            } else {
                 parametro = new HashMap();
                parametro.put("periodo2_id", id);
            }
            JasperPrint jasperPrint = null;

            //Reporte diseñado y compilado con iReport));
            jasperPrint = JasperFillManager.fillReport(masterReport, parametro, conn);
            /*JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Dimas - Reporte");
            jviewer.setVisible(true);*/

            File objFile = null;

            System.out.println("este es el valor del selectfield" + vis);
            if (vis == 0) {


                /*JasperExportManager.exportReportToPdfFile(jasperPrint, "/opt/innoapps/ALT/factura.pdf");
                JasperExportManager.exportReportToPdfFile(jasperPrint, "/opt/innoapps/ALT/factura.pdf");*/
                JasperExportManager.exportReportToPdfFile(jasperPrint, "C:/Users/develop/Documents/DocsSapra/factura.pdf");
                //JasperExportManager.exportReportToPdfFile(jasperPrint, "/home/cobain/Escritorio/factura.pdf");
                /*objFile = new File("/opt/innoapps/ALT/factura.pdf");
                objFile = new File("/opt/innoapps/ALT/factura.pdf");*/
                //objFile = new File("C:/Users/develop/Documents/DocsSapra/factura.pdf");
                 objFile = new File("C:/Users/develop/Documents/DocsSapra/factura.pdf");
                 //objFile = new File("/home/cobain/Escritorio/factura.pdf");

                /*JasperExportManager.exportReportToPdfFile(jasperPrint, "C:/Users/develop/Documents/DocsSapra/factura.pdf");
                //JasperExportManager.exportReportToPdfFile(jasperPrint, "C:/Users/develop/Documents/DocsSapra/factura.pdf");
                //JasperExportManager.exportReportToPdfFile(jasperPrint, "/home/cobain/Escritorio/factura.pdf");
                //objFile = new File("C:/Users/develop/Documents/DocsSapra/factura.pdf");
                //objFile = new File("/home/cobain/Escritorio/factura.pdf");*/


                descargarArchivo(objFile);
                //objFile.delete();
            }

            JExcelApiExporter xlsExporter = null;
            if (vis == 1) {
                xlsExporter = new JExcelApiExporter();
                JRXlsExporter exporterXLS = new JRXlsExporter();
                xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

                xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "C:/Users/develop/Documents/DocsSapra/factura.xls");
                //xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"C:/Users/develop/Documents/DocsSapra/factura.xls");
                //xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"/home/cobain/Escritorio/factura.xls");
                xlsExporter.exportReport();
                //objFile = new File("C:/Users/develop/Documents/DocsSapra/factura.xls");
                objFile = new File("C:/Users/develop/Documents/DocsSapra/factura.xls");
                //objFile = new File("/home/cobain/Escritorio/factura.xls");
                descargarArchivo(objFile);
            }

            /*if(vis==2){
            /*JasperExportManager.exportReportToHtmlFile(jasperPrint, "/home/cobain/Escritorio/factura.html");
            objFile = new File("/home/cobain/Escritorio/factura.html");

            final JRHtmlExporter exporter = new JRHtmlExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"/home/cobain/Escritorio/factura.html" );
            //exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"/opt/innoapps/ALT/factura.html" );
            exporter.exportReport();

            verHTMl ver=new verHTMl();
            verHTMl.abrirURL("/home/cobain/Escritorio/factura.html");
            // ver.abrirURL("/opt/innoapps/ALT/factura.html");

            //descargarArchivo(objFile);
            }*/
            if (objFile.exists()) {
                objFile.delete();
                objFile = null;
            }
            xlsExporter.exportReport();
            objFile.delete();
            objFile = null;
        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        }
    }

    public void descargarArchivo(File f) {
        final byte[] content = new byte[(int) f.length()];
        try {
            FileInputStream inputStream = new FileInputStream(f);
            inputStream.read(content);
            inputStream.close();
        } catch (Exception e) {
            System.out.println("error");
        }
        final String fname = f.getName();
        Download archivo = new Download();
        archivo.setProvider(new DownloadProvider() {

            public String getContentType() {
                return ".csv";
            }

            public String getFileName() {
                return fname;
            }

            public int getSize() {
                return 0;
            }

            public void writeFile(OutputStream out) throws IOException {
                out.write(content);
            }
        });
        f.delete();
        archivo.setActive(true);
        ApplicationInstance app = ApplicationInstance.getActive();
        app.getActive().enqueueCommand(archivo);
    }

    public void cerrar() {
        try {
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
